/**
 * @(#)PerfilSocialK.java
 *
 * Copyright (c) 2005-2010 PsiqueWare S.A. de C.V. All Rights Reserved.
 * This software is the proprietary information PsiqueWare S.A. de C.V.
 * Use is subject to license terms.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 * <br/>Usuario : &Aacute;ngel El&eacute;ctrico
 * <br/>Creación:
 * <br/>
 * <br/>
 * <br/><t5>Cambios :</t5>
 * <br/><b>Fecha | Autor  |  Cambios</b>
 * <ul>
 * <li> | <a href = "mailto:AngelElectrico@PsiqueWare.com">&Aacute;ngel El&eacute;ctrico</a> | Creaci&oacute;n del Objeto.</li>
 *
 * </ul>
 */
package com.psiqueware.alheli.id.modelo;

import com.psiqueware.alheli.basico.BaseObject;
import com.psiqueware.alheli.id.Dominio;
import com.psiqueware.alheli.id.PerfilSocial;

import java.net.URI;

/**
 * Perfil para un Usuario con campos de interacci&oacute;n social como los modelados por Spring Social.
 * <p/>
 * Los campos de Srping Social y su correspondencia son: <br/>
 * <ol>
 * <li>userId: {@link UsuarioK#getIdentificacion()} usando <code>idUsuario</code> para llegar.</li>
 * <li>providerId: {@link DominioK#getNombre()}</li>
 * <li>providerUserId: <code>identificacionSocial</code></li>
 * <li>rank: <code>prioridad</code></li>
 * <li>displayName: {@link UsuarioK#getTitulo()}</li>
 * <li>profileUrl: direccionPerfil</li>
 * <li>imageUrl: direccionImagen</li>
 * <li>accessToken: identificacionRemota</li>
 * <li>secret: autentificacionRemota</li>
 * <li>refreshToken: identificacionRefresco</li>
 * <li>expireTime: expiracion</li>
 * </ol>
 * <br/>Paquete Original: com.psiqueware.alheli.id.modelo
 * <br/>Nombre  Original: PerfilSocialK
 * <br/><a href="PerfilSocialK.java.html"><i>Ver C&oacute;digo Fuente</i> </a>
 *
 * @author <a href="mailto:AngelElectrico@PsiqueWare.com">Angel El&eacute;ctrico</a>
 * @version Revision: 1.0
 */
public class PerfilSocialK extends BaseObject implements PerfilSocial
{
    /**
     * Identificador &uacute;nico del {@link UsuarioK} al que pertenece esta informaci&oacute;n social.
     */
    private Long m_idUsuario;

    /**
     * Identificador &uacute;nico del {@link DominioK} al que pertenece esta informaci&oacute;n social.
     */
    private Long m_idDominio;

    /**
     * {@link Dominio} al que pertenece esta informaci&oacute;n social.
     */
    private Dominio m_dominio;

    /**
     * Nombre de usuario en la aplicaci&oacute;n remota.
     * En Spring Social el campo se denomina <code>providerId</code>.
     */
    private String m_identificacionSocial;

    /**
     * Prioridad que indica que si el usuario tiene m&uacute;ltiples conexiones cu&aacute;l se usar&aacute; primero.
     * En Spring Social el campo se denomina <code>Rank</code>.
     */
    private int m_prioridad;

    /**
     * {@link URI} que apunta al perfil social.
     * En Spring Social el campo se denomina <code>profileUrl</code>.
     */
    private URI m_direccionPerfil;

    /**
     * {@link URI} que apunta a la imagen del perfil social.
     * En Spring Social el campo se denomina <code>imageUrl</code>.
     */
    private URI m_direccionImagen;

    /**
     * Cadena que identifica el acceso remoto en la aplicaci&oacute;n social.
     * En Spring Social el campo se denomina <code>accessToken</code>.
     */
    private String m_identificacionRemota;

    /**
     * Cadena que autentifica el acceso remoto en la aplicaci&oacute;n social.
     * En Spring Social el campo se denomina <code>secret</code>.
     */
    private char[] m_autentificacionRemota;

    /**
     * Cadena que identifica el reuso del acceso remoto en la aplicaci&oacute;n social.
     * En Spring Social el campo se denomina <code>refreshToken</code>.
     */
    private String m_identificacionRefresco;

    /**
     * Tiempo en milisegundos para la expiraci&oacute;n de las credenciales remotas.
     * En Spring Social el campo se denomina <code>expireTime</code>.
     */
    private Long m_expiracion;

    /**
     * Devuelve el Identificador &uacute;nico del {@link UsuarioK} al que pertenece esta informaci&oacute;n social.
     *
     * @return Valor de 'm_idUsuario'.
     */
    @Override
    public Long getIdUsuario()
    {
        return m_idUsuario;
    }

    /**
     * Establece el Identificador &uacute;nico del {@link UsuarioK} al que pertenece esta informaci&oacute;n social.
     *
     * @param idUsuario Nuevo valor para 'm_idUsuario'.
     */
    public void setIdUsuario(final Long idUsuario)
    {
        m_idUsuario = idUsuario;
    }

    /**
     * Establece el Nombre de usuario en la aplicaci&oacute;n remota.
     *
     * @return Valor de 'm_identificacionSocial'.
     */
    @Override
    public String getIdentificacionSocial()
    {
        return m_identificacionSocial;
    }

    /**
     * Devuelve el Nombre de usuario en la aplicaci&oacute;n remota.
     *
     * @param identificacionSocial Nuevo valor para 'm_identificacionSocial'.
     */
    public void setIdentificacionSocial(final String identificacionSocial)
    {
        m_identificacionSocial = identificacionSocial;
    }

    /**
     * Devuelve el Prioridad que indica que si el usuario tiene m&uacute;ltiples conexiones cu&aacute;l se usar&aacute; primero.
     *
     * @return Valor de 'm_prioridad'.
     */
    @Override
    public int getPrioridad()
    {
        return m_prioridad;
    }

    /**
     * Establece la Prioridad que indica que si el usuario tiene m&uacute;ltiples conexiones cu&aacute;l se usar&aacute; primero.
     *
     * @param prioridad Nuevo valor para 'm_prioridad'.
     */
    public void setPrioridad(final int prioridad)
    {
        m_prioridad = prioridad;
    }

    /**
     * Devuelve la {@link URI} que apunta al perfil social.
     *
     * @return Valor de 'm_direccionPerfil'.
     */
    @Override
    public URI getDireccionPerfil()
    {
        return m_direccionPerfil;
    }

    /**
     * Establece la {@link URI} que apunta al perfil social.
     *
     * @param direccionPerfil Nuevo valor para 'm_direccionPerfil'.
     */
    public void setDireccionPerfil(final URI direccionPerfil)
    {
        m_direccionPerfil = direccionPerfil;
    }

    /**
     * Devuelve la {@link URI} que apunta a la imagen del perfil social.
     *
     * @return Valor de 'm_direccionImagen'.
     */
    @Override
    public URI getDireccionImagen()
    {
        return m_direccionImagen;
    }

    /**
     * Establece la {@link URI} que apunta a la imagen del perfil social.
     *
     * @param direccionImagen Nuevo valor para 'm_direccionImagen'.
     */
    public void setDireccionImagen(final URI direccionImagen)
    {
        m_direccionImagen = direccionImagen;
    }

    /**
     * Establece la Cadena que identifica el acceso remoto en la aplicaci&oacute;n social.
     *
     * @return Valor de 'm_identificacionRemota'.
     */
    @Override
    public String getIdentificacionRemota()
    {
        return m_identificacionRemota;
    }

    /**
     * Devuelve la Cadena que identifica el acceso remoto en la aplicaci&oacute;n social.
     *
     * @param identificacionRemota Nuevo valor para 'm_identificacionRemota'.
     */
    public void setIdentificacionRemota(final String identificacionRemota)
    {
        m_identificacionRemota = identificacionRemota;
    }

    /**
     * Devuelve la Cadena que autentifica el acceso remoto en la aplicaci&oacute;n social.
     *
     * @return Valor de 'm_autentificacionRemota'.
     */
    @Override
    public char[] getAutentificacionRemota()
    {
        return null == m_autentificacionRemota ? null : m_autentificacionRemota.clone();
    }

    /**
     * Establece la Cadena que autentifica el acceso remoto en la aplicaci&oacute;n social.
     *
     * @param autentificacionRemota Valor para 'm_autentificacionRemota'
     */
    public void setAutentificacionRemota(final char[] autentificacionRemota)
    {
        m_autentificacionRemota = autentificacionRemota;
    }

    /**
     * Devuelve la Cadena que identifica el reuso del acceso remoto en la aplicaci&oacute;n social.
     *
     * @return Valor de 'm_identificacionRefresco'.
     */
    @Override
    public String getIdentificacionRefresco()
    {
        return m_identificacionRefresco;
    }

    /**
     * Establece la Cadena que identifica el reuso del acceso remoto en la aplicaci&oacute;n social.
     *
     * @param identificacionRefresco Nuevo valor para 'm_identificacionRefresco'.
     */
    public void setIdentificacionRefresco(final String identificacionRefresco)
    {
        m_identificacionRefresco = identificacionRefresco;
    }

    /**
     * Devuelve el Tiempo en milisegundos para la expiraci&oacute;n de las credenciales remotas.
     *
     * @return Valor de 'm_expiracion'.
     */
    @Override
    public Long getExpiracion()
    {
        return m_expiracion;
    }

    /**
     * Establece el Tiempo en milisegundos para la expiraci&oacute;n de las credenciales remotas.
     *
     * @param expiracion Valor para 'm_expiracion'.
     */
    public void setExpiracion(final Long expiracion)
    {
        m_expiracion = expiracion;
    }

    /**
     * Devuelve el Identificador &uacute;nico del {@link DominioK} al que pertenece esta informaci&oacute;n social.
     *
     * @return Valor de 'm_idDominio'.
     */
    public Long getIdDominio()
    {
        return m_idDominio;
    }

    /**
     * Establece el Identificador &uacute;nico del {@link DominioK} al que pertenece esta informaci&oacute;n social.
     *
     * @param idDominio Nuevo valor para 'm_idDominio'.
     */
    public void setIdDominio(final Long idDominio)
    {
        m_idDominio = idDominio;
    }

    /**
     * Devuelve el {@link Dominio} al que pertenece esta informaci&oacute;n social.
     *
     * @return Valor de 'm_dominio'.
     */
    public Dominio getDominio()
    {
        return m_dominio;
    }

    /**
     * Establece el {@link Dominio} al que pertenece esta informaci&oacute;n social.
     *
     * @param dominio Nuevo valor para 'm_dominio'.
     */
    public void setDominio(final Dominio dominio)
    {
        m_dominio = dominio;
    }
}
